package com.songtai.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.songtai.util.PageBean;

/**
 * genericDao
 * 
 * @author lx
 * 
 * @param <T>
 * @param <PK>
 */
public interface GenericDao<T> {
	/**
	 * 保存实体
	 * 
	 * @param entity
	 *            实体
	 * @return 保存后得到的id
	 */
	public Serializable createObject(T entity);

	/**
	 * 保存多个实体
	 * 
	 * @param entities
	 *            实体集合
	 */
	public void createEntities(Collection<T> entities);

	/**
	 * 根据ID查询实体
	 * 
	 * @param entity
	 *            实体.class
	 * @param id
	 *            Id
	 * @return
	 */
	public T readObjectById(Serializable id);

	/**
	 * 查询所有实体
	 * 
	 * @param entityClass
	 *            实体类型
	 * @return
	 */
	public List<T> readAll(String className);

	/**
	 * 查询符合条件的实体集合
	 * 
	 * @param hql
	 *            查询语句
	 * @return
	 */
	public List<T> readByCondition(String hql, Object[] values);

	/**
	 * 更新实体
	 * 
	 * @param entity
	 *            实体
	 */
	public void updateObject(T entity);

	/**
	 * 删除一个实体
	 * 
	 * @param entity
	 *            实体
	 */
	public void deleteObject(T entity);

	/**
	 * 删除全部或者指定条件的实体
	 * 
	 * @param hql
	 *            hql语句
	 */
	public void deleteEntities(String hql);

	/**
	 * 分页查询
	 * 
	 * @param pageBean
	 * @return
	 */
	public PageBean findPageEntities(final PageBean pageBean);

	/**
	 * SQL分页查询
	 * 
	 * @param pageBean
	 * @return
	 */
	public PageBean findPageEntitiesBySql(final PageBean pageBean);

	/**
	 * 添加或保存
	 * 
	 * @param id
	 */
	public void saveOrUpdateEntity(T entity);

}
